Sposoby łączenia się z serwerem
Możemy korzystać z wielu sposobów, aby połączyć się z serwerem. AWS oferuje nam kilka opcji, które opisuję poniżej.
EC2 Instance Connect
Ważne:
- Nie musisz udostępniać i zarządzać kluczami SSH.
- Instancja musi mieć publiczny adres IPv4.
- Możesz połączyć się z instancją przez prywatną sieć za pomocą EC2 Instance Connect CLI z innych serwerów.
- Jako nazwę użytkownika możesz podać dowolnego użytkownika, który istnieje w systemie i ma uprawnienia do logowania.
Więcej informacji:
Session Manager
Session Manager to w pełni zarządzana funkcja AWS Systems Manager, która pozwala zarządzać instancjami Amazon EC2 za pomocą interaktywnej przeglądarkowej powłoki lub za pomocą AWS CLI.
Ważne:
- Agent SSM powinien być zainstalowany na instancji.
- Należy utworzyć profil IAM Instance i przypisać rolę IAM do instancji.
- Grupa bezpieczeństwa dodana do punktu końcowego VPC musi zezwalać na ruch przychodzący HTTPS (port 443) z zasobów w Twoim VPC, które komunikują się z usługą.
- Włączenie prywatnego DNS wymaga ustawienia atrybutów enableDnsSupport i enableDnsHostnames na true dla VPC.
Przykład połączenia za pomocą AWS CLI:
aws ssm start-session --target INSTANCE_ID
Więcej informacji:
- Agent SSM https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html
- Session Manager https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/session-manager.html
- Profil Instance https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html
- Przypisanie roli IAM https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#attach-iam-role
Klient SSH
Ważne:
- Musisz udostępniać i zarządzać kluczami SSH.
- Grupa bezpieczeństwa musi zezwalać na ruch przychodzący SSH (port 22).
Przykład połączenia:
ssh -i /path/key-pair-name.pem instance-user-name@instance-public-dns-name
Więcej informacji:
- Putty https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html
- OpenSSH https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/openssh.html
- WSL https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/WSL.html
Konsola szeregowa EC2
Ważne:
- Musisz zezwolić na "Konsolę szeregową EC2" w "Ustawieniach EC2".
- Musimy mieć możliwość zalogowania się na serwer z lokalnej konsoli. Logowanie za pomocą hasła.
- Musimy używać typu instancji opartego na systemie AWS Nitro.
Kiedy używać?
- Kiedy chcemy zmienić hasło.
- Kiedy chcemy odzyskać dostęp do serwera.
Włącz konsolę szeregową EC2:
aws ec2 enable-serial-console-access --region us-east-1
Więcej informacji:
- Konfiguracja dostępu do konsoli szeregowej EC2 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html
- Instancje oparte na systemie Nitro https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.htmlicmpid=docs_ec2_console#ec2-nitro-instances
- Domyślni użytkownicy: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-users.html
Jak odzyskać dostęp do serwera?
Przypadek:
- Nie mamy kluczy SSH.
- Serwer SSH nie działa.
- Nie mamy hasła do użytkownika.
- Agent SSM nie został zainstalowany.
Domyślnie w obrazie Amazon Linux 2 nie jest generowane hasło dla użytkownika "ec2-user". Możemy ustawić to hasło, dodać klucz publiczny SSH lub naprawić inne problemy.
Mamy kilka popularnych sposobów, aby to zrobić:
- Utwórz AMI z uszkodzonego serwera/EBS i utwórz nowy serwer z AMI.
- Wyłącz instancję, odłącz EBS i podłącz EBS do nowego tymczasowego serwera, gdzie możemy naprawić usługi/pliki na tym EBS.
- Ustaw hasło dla lokalnego użytkownika.
Ustawianie hasła dla lokalnego użytkownika na EC2
Możemy użyć "User data" do tego celu. Domyślnie dane użytkownika działają podczas pierwszego uruchomienia serwera.
Możemy uruchomić następujące polecenie, aby ustawić hasło dla użytkownika ec2-user:
echo "hasło" | passwd --stdin ec2-user
Przykład skryptu, który uruchamia się raz:
#!/bin/bash
/bin/echo "Hello World" >> /tmp/helloworld.txt
echo "hasło" | passwd --stdin ec2-user
Co powinniśmy zrobić?
Możemy dodać następujący skrypt do "User data", który uruchamia się za każdym razem, gdy serwer się uruchamia:
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
echo "hasło" | passwd --stdin ec2-user
--//--
To ustawia hasło (hasło) dla użytkownika ec2-user.
Więcej informacji: